package com.demandbreakdown.xiyun.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.demandbreakdown.xiyun.model.dto.picture.PictureQueryDTO;
import com.demandbreakdown.xiyun.model.dto.picture.PictureReview;
import com.demandbreakdown.xiyun.model.dto.picture.PictureUpdateDTO;
import com.demandbreakdown.xiyun.model.dto.picture.PictureUploadDTO;
import com.demandbreakdown.xiyun.model.entity.Picture;
import com.demandbreakdown.xiyun.model.vo.common.PageVO;
import com.demandbreakdown.xiyun.model.vo.picture.PictureVO;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

/**
 * 图片服务接口
 *
 * @author poxz
 */
public interface PictureService extends IService<Picture> {

    /**
     * 上传图片
     *
     * @param userId    用户ID
     * @param file      文件对象
     * @param uploadDTO 上传参数
     * @return PictureVO
     */
    PictureVO uploadPicture(Long userId, MultipartFile file, PictureUploadDTO uploadDTO);

    /**
     * 分页查询图片
     *
     * @param pictureQueryDTO 图片查询参数
     * @param currentUserId   当前用户ID
     * @return PageVO
     */
    PageVO<PictureVO> getPictures(PictureQueryDTO pictureQueryDTO, Long currentUserId);

    /**
     * 获取图片详情
     *
     * @param id            主键ID
     * @param currentUserId 当前用户ID
     * @return PictureVO
     */
    PictureVO getPictureById(Long id, Long currentUserId);

    /**
     * 更新图片信息
     *
     * @param id               主键ID
     * @param userId           用户ID
     * @param pictureUpdateDTO 图片更新参数
     * @return PictureVO
     */
    PictureVO updatePicture(Long id, Long userId, PictureUpdateDTO pictureUpdateDTO);

    /**
     * 删除图片
     *
     * @param id     主键ID
     * @param userId 用户ID
     */
    void deletePicture(Long id, Long userId);

    /**
     * 下载图片
     *
     * @param id            主键ID
     * @param currentUserId 当前用户ID
     * @param response      HTTP响应对象
     */
    void downloadPicture(Long id, Long currentUserId, HttpServletResponse response);

    /**
     * 审核图片
     *
     * @param id            主键ID
     * @param reviewerId    审核人 ID
     * @param pictureReview 图片审核参数
     */
    void reviewPicture(Long id, Long reviewerId, PictureReview pictureReview);

    /**
     * 分享图片（增加分享次数）
     *
     * @param id            主键ID
     * @param currentUserId 当前用户ID
     */
    void sharePicture(Long id, Long currentUserId);
}
